{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "*Sebastian Raschka*  \n",
      "last modified: 03/31/2014"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "### Problem Category\n",
      "- Statistical Pattern Recognition   \n",
      "- Supervised Learning  \n",
      "- Parametric Learning  \n",
      "- Bayes Decision Theory  \n",
      "- Univariate data  \n",
      "- 2-class problem\n",
      "- different variances\n",
      "- equal priors\n",
      "- Cauchy model (2 parameters)\n",
      "- With conditional Risk (1-0 loss functions)\n",
      "<hr>"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p><a name=\"sections\"></a>\n",
      "<br></p>\n",
      "\n",
      "# Sections\n",
      "\n",
      "\n",
      "<p>&#8226; <a href=\"#given\">Given information</a><br>\n",
      "&#8226; <a href=\"#deriving_db\">Deriving the decision boundary</a><br>\n",
      "&#8226; <a href=\"#plotting_db\">Plotting the posterior probabilities and decision boundary</a><br>\n",
      "&#8226; <a href=\"#classify_rand\">Classifying some random example data</a><br>\n",
      "&#8226; <a href=\"#emp_err\">Calculating the empirical error rate</a><br>\n",
      "\n",
      "  \n",
      "\n",
      "  \n",
      "  \n",
      "\n",
      "\n",
      "\n",
      "<hr>"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p><a name=\"given\"></a>\n",
      "<br></p>\n",
      "\n",
      "## Given information:\n",
      "\n",
      "[<a href=\"#sections\">back to top</a>] <br>\n",
      "\n",
      "\n",
      "####model: continuous univariate Cauchy distribution for the class-conditional densities\n",
      "\n",
      "\n",
      "$ p(x | \\omega_j) = \\frac{1}{\\pi b} \\; \\dot \\; \\frac{1}{1 \\; + \\; \\bigg(\\frac{x - a_i}{b} \\bigg)^2} \\quad i = 1, 2$ \n",
      "\n",
      "####Prior probabilities:\n",
      "\n",
      "\n",
      "$ P(\\omega_1) = P(\\omega_2) = 0.5 $\n",
      "\n",
      "\n",
      "####Loss functions:\n",
      "\n",
      "where \n",
      "\n",
      "$ \\lambda(\\alpha_i|\\omega_j) = \\lambda_{ij}$,  \n",
      "\n",
      "the loss occured if $action_i$ is taken if the actual true class is $ \\omega_j$ (assuming that $action_i$ classifies sample as $\\omega_i$)\n",
      "\n",
      "\\begin{equation}\n",
      "\\lambda = \\begin{pmatrix}\n",
      "\\lambda_{11} \\quad \\lambda_{12} \\\\\n",
      "\\lambda_{21} \\quad \\lambda_{22}\n",
      "\\end{pmatrix}\n",
      "= \\begin{pmatrix}\n",
      "0 \\quad 1 \\\\\n",
      "1 \\quad 0 \\\\\n",
      "\\end{pmatrix}\\\\\n",
      "\\end{equation}\n",
      "\n",
      "#### Parameters\n",
      "\n",
      "$ a_1 = 0, \\quad a_2 = 2 ,\\quad b=0.5$\n",
      "\n",
      "\n",
      "<br>"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p><a name=\"deriving_db\"></a>\n",
      "<br></p>\n",
      "\n",
      "## Deriving the decision boundary\n",
      "[<a href=\"#sections\">back to top</a>] <br>\n",
      "\n",
      "### Bayes' Rule:\n",
      "\n",
      "\n",
      "$ P(\\omega_j|x) = \\frac{p(x|\\omega_j) * P(\\omega_j)}{p(x)}$ \n"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "### Risk Functions:\n",
      "\n",
      "$ R(\\alpha_1|x) = \\lambda_{11}P(\\omega_1|x) + \\lambda_{12}P(\\omega_2|x) $\n",
      "\n",
      "$ R(\\alpha_2|x) = \\lambda_{21}P(\\omega_1|x) + \\lambda_{22}P(\\omega_2|x) $\n",
      "\n"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "###Decision Rule:\n",
      "\n",
      "Decide $ \\omega_1 $ if $ R(\\alpha_2|x) > R(\\alpha_1|x) $ else decide $ \\omega_2 $."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$ \\Rightarrow \\lambda_{21}P(\\omega_1|x) + \\lambda_{22}P(\\omega_2|x) > \\lambda_{11}P(\\omega_1|x) + \\lambda_{12}P(\\omega_2|x) $\n",
      "\n",
      "$ \\Rightarrow (\\lambda_{21} - \\lambda_{11}) \\; P(\\omega_1|x) > (\\lambda_{12} - \\lambda_{22}) \\; P(\\omega_2|x) $\n",
      "\n",
      "$ \\Rightarrow \\frac{P(\\omega_1|x)}{P(\\omega_2|x)} > \\frac{(\\lambda_{12} - \\lambda_{22})}{(\\lambda_{21} - \\lambda_{11})} $\n",
      "\n",
      "$ \\Rightarrow \\frac{p(x|\\omega_1) \\; P{(\\omega_1)}}{p(x|\\omega_2) \\; P{(\\omega_2)}} > \\frac{(\\lambda_{12} - \\lambda_{22})}{(\\lambda_{21} - \\lambda_{11})} $\n",
      "\n",
      "$ \\Rightarrow \\frac{p(x|\\omega_1)}{p(x|\\omega_2)} > \\frac{(\\lambda_{12} - \\lambda_{22}) \\; P{(\\omega_2)}}{(\\lambda_{21} - \\lambda_{11}) \\; P{(\\omega_1)}} $\n"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "\n",
      "$ \\Rightarrow \\frac{p(x|\\omega_1)}{P(x|\\omega_2)} > \\frac{(1 - 0) \\; (0.5)}{(1 - 0) \\; (0.5)} $\n",
      "\n",
      "$ \\Rightarrow \\frac{p(x|\\omega_1)}{P(x|\\omega_2)} > 1 $\n"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$\\Rightarrow \\frac{1}{\\pi b} \\; \\dot \\; \\frac{1}{1 \\; + \\; \\bigg(\\frac{x - a_1}{b} \\bigg)^2} > \\frac{1}{\\pi b} \\; \\dot \\; \\frac{1}{1 \\; + \\; \\bigg(\\frac{x - a_2}{b} \\bigg)^2}$"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$\\Rightarrow  \\frac{1}{1 \\; + \\; \\bigg(\\frac{x - a_1}{b} \\bigg)^2} > \\frac{1}{1 \\; + \\; \\bigg(\\frac{x - a_2}{b} \\bigg)^2}$"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$\\Rightarrow  \\bigg(\\frac{x - a_1}{b} \\bigg)^2 > \\bigg(\\frac{x - a_2}{b} \\bigg)^2$"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$\\Rightarrow x-a_1 > x-a_2 $"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$ \\Rightarrow x < \\frac{a_1+a_2}{2} $"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Decide $ \\omega_1 $ if $ x < \\frac{a_1+a_2}{2}$ else decide $ \\omega_2 $."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p><a name=\"plotting_db\"></a>\n",
      "<br></p>\n",
      "\n",
      "## Plotting the class posterior probabilities and decision boundary\n",
      "\n",
      "[<a href=\"#sections\">back to top</a>] <br>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline\n",
      "\n",
      "import numpy as np\n",
      "from matplotlib import pyplot as plt\n",
      "\n",
      "def cauchy(x, a, b):\n",
      "    \"\"\"\n",
      "    Calculates the Cauchy distribution's probability density \n",
      "    function.  \n",
      "        \n",
      "    \"\"\"\n",
      "    term1 = 1 / (np.pi * b)\n",
      "    term2 = 1 / (1 + ((x - a)/b)**2)\n",
      "    return term1 * term2\n",
      "\n",
      "def decision_boundary(a1, a2):\n",
      "    return (a1 + a2) / 2\n",
      "\n",
      "def posterior(likelihood, prior):\n",
      "    \"\"\"\n",
      "    Calculates the posterior probability (after Bayes Rule) without\n",
      "    the scale factor p(x) (=evidence).  \n",
      "        \n",
      "    \"\"\"\n",
      "    return likelihood * prior\n",
      "\n",
      "# generating some sample data for plotting the posterior probabilities\n",
      "x = np.arange(-10, 10, 0.05)\n",
      "\n",
      "# probability density functions\n",
      "posterior1 = posterior(cauchy(x, a=0, b=0.5), prior=0.5)\n",
      "posterior2 = posterior(cauchy(x, a=2, b=0.5), prior=0.5)\n",
      "\n",
      "# plotting probability density functions\n",
      "plt.plot(x, posterior1)\n",
      "plt.plot(x, posterior2)\n",
      "plt.title('Posterior Probabilities w. Decision Boundary for a Cauchy Distribution')\n",
      "plt.ylabel('P(w)')\n",
      "plt.xlabel('random variable x')\n",
      "plt.legend(['P(w_1|x)', 'P(w_2|x)'], loc='upper right')\n",
      "plt.ylim([0,0.4])\n",
      "plt.xlim([-4,6])\n",
      "\n",
      "# plotting the decision boundary\n",
      "bound = decision_boundary(a1=0, a2=2)\n",
      "plt.vlines(bound, -10, 10, color='r', alpha=0.8, linestyle=':', linewidth=2)\n",
      "plt.annotate('R1', xy=(0.0, 0.35), xytext=(0.0, 0.35))\n",
      "plt.annotate('R2', xy=(2.0, 0.35), xytext=(2.0, 0.35))\n",
      "plt.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n0fH/clDucPC72HUAAAAASUVORK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x104770e90>"
       ]
      }
     ],
     "prompt_number": 12
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p><a name=\"classify_rand\"></a>\n",
      "<br></p>\n",
      "\n",
      "## Classifying some random example data\n",
      "\n",
      "[<a href=\"#sections\">back to top</a>] <br>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import math \n",
      "import random as rnd\n",
      "\n",
      "def cauchy(location, scale):\n",
      "    \"\"\"\n",
      "    Generates random cauchy distributed data\n",
      "    reference: http://www.johndcook.com/python_cauchy_rng.html\n",
      "    \n",
      "    \"\"\"\n",
      "    p = 0.0\n",
      "    while p == 0.0:\n",
      "        p = rnd.random()\n",
      "        \n",
      "    return location + scale*math.tan(math.pi*(p - 0.5))\n",
      "\n",
      "\n",
      "# Parameters\n",
      "a_1 = 0\n",
      "a_2 = 2\n",
      "b = 0.5\n",
      "\n",
      "# Generating 20 Cauchy distributed random samples for class 1 & 2\n",
      "x1_samples = [cauchy(a_1, b) for i in range(20)]\n",
      "x2_samples = [cauchy(a_2, b) for i in range(20)]\n",
      "y = [0.1 for i in range(20)]\n",
      "\n",
      "plt.scatter(x1_samples, y, marker='o', color='green', s=40, alpha=0.5)\n",
      "plt.scatter(x2_samples, y, marker='^', color='blue', s=40, alpha=0.5)\n",
      "plt.ylim([0,0.4])\n",
      "plt.xlim([-4,6])\n",
      "\n",
      "# Plotting the decision boundary\n",
      "bound = decision_boundary(a1=0, a2=2)\n",
      "plt.vlines(bound, -10, 10, color='r', alpha=0.8, linestyle=':', linewidth=2)\n",
      "plt.annotate('R1', xy=(0.0, 0.2), xytext=(0.0, 0.2))\n",
      "plt.annotate('R2', xy=(2.0, 0.2), xytext=(2.0, 0.2))\n",
      "\n",
      "# Plot annotation\n",
      "plt.title('Classifying random example data from 2 classes')\n",
      "plt.ylabel('')\n",
      "plt.xlabel('random variable x')\n",
      "plt.legend(['w_1', 'w_2'], loc='upper right')\n",
      "\n",
      "plt.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x106394890>"
       ]
      }
     ],
     "prompt_number": 23
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p><a name=\"emp_err\"></a>\n",
      "<br></p>\n",
      "\n",
      "## Calculating the empirical error rate\n",
      "\n",
      "[<a href=\"#sections\">back to top</a>] <br>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "w1_as_w2, w2_as_w1 = 0, 0\n",
      "for x1,x2 in zip(x1_samples, x2_samples):\n",
      "    if x1 > decision_boundary(a1=0, a2=2):\n",
      "        w1_as_w2 += 1\n",
      "    if x2 <= decision_boundary(a1=0, a2=2):\n",
      "        w2_as_w1 += 1\n",
      "  \n",
      "emp_err =  (w1_as_w2 + w2_as_w1) / float(len(x1_samples) + len(x2_samples))\n",
      "    \n",
      "print('Empirical Error: {}%'.format(emp_err * 100))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Empirical Error: 10.0%\n"
       ]
      }
     ],
     "prompt_number": 21
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Calculating the Bayes Error\n"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$ P(error) = \\int_{x=-\\infty}^{\\infty} P(error/x) \\; \\cdot \\; p(x) \\; dx $\n",
      "\n",
      "\n",
      "$ P(error|x) = \\left\\{ \n",
      "  \\begin{array}{l l}\n",
      "    P(\\omega_1 | x) & \\quad \\text{if $x > \\frac{a_1 + a_2}{2}$}\\\\\n",
      "    P(\\omega_2 | x) & \\quad \\text{if $x < \\frac{a_1 + a_2}{2}$}\n",
      "  \\end{array} \\right.$ "
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$ \\Rightarrow \\int_{x=-\\infty}^{\\frac{a_1+a_2}{2}} P(\\omega_2|x) \\; \\cdot \\; p(x) \\; dx  + \\int_{x=\\frac{a_1+a_2}{2}}^{\\infty} P(\\omega_1|x) \\; \\cdot \\; p(x) \\; dx$"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$ \\Rightarrow \\int_{x=-\\infty}^{\\frac{a_1+a_2}{2}} p(x|\\omega_2) \\; \\cdot \\; P(\\omega_2) \\; dx  + \\int_{x=\\frac{a_1+a_2}{2}}^{\\infty} p(x|\\omega_1) \\; \\cdot \\; P(\\omega_1) \\; dx$"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$ \\Rightarrow \\int_{x=-\\infty}^{\\frac{a_1+a_2}{2}} \\frac{1}{\\pi b} \\; \\dot \\; \\frac{1}{1 \\; + \\; \\bigg(\\frac{x - a_2}{b} \\bigg)^2} \\; \\frac{1}{2} \\; dx  + \\int_{x=\\frac{a_1+a_2}{2}}^{\\infty} \\frac{1}{\\pi b} \\; \\dot \\; \\frac{1}{1 \\; + \\; \\bigg(\\frac{x - a_1}{b} \\bigg)^2} \\; \\frac{1}{2} \\; dx$"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "$ \\Rightarrow \\frac{1}{2} - \\frac{1}{\\pi} \\; tan^{-1} \\bigg| \\frac{a_2 - a_1}{2b} \\bigg|$"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def bayes_error(a1, a2, b):\n",
      "    \"\"\" Calculates the Bayes Error for 2 Cauchy densities .\"\"\"\n",
      "    term1 = 1/2.0 - 1/np.pi\n",
      "    term2 = np.arctan(np.fabs((a2-a1)/(2*b)))\n",
      "    return term1 * term2\n",
      "\n",
      "print('Bayes Error: {:.2f}%'.format(100* bayes_error(0, 2, 0.5)))\n",
      "    "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Bayes Error: 20.12%\n"
       ]
      }
     ],
     "prompt_number": 11
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}